package com.jthinker.dao;

import java.util.List;
import java.util.Map;

/**
 * Created by chen.gang on 2015/2/10.
 */
public interface BaseDao
{
    /**
     * 查询单个对像
     *
     * @param sql
     * @param params
     * @return
     */
    Map<String, Object> read(String sql, Object... params);

    /**
     * 查询单个对象并转成bean
     *
     * @param sql
     * @param clazz
     * @param params
     * @param <T>
     * @return
     */
    <T> T read(String sql, Class<T> clazz, Object... params);

    /**
     * 查询列表
     *
     * @param sql
     * @param params
     * @return
     */
    List<Map<String, Object>> query(String sql, Object... params);

    /**
     * 查询对象列表
     *
     * @param sql
     * @param clazz
     * @param params
     * @param <T>
     * @return
     */
    <T> List<T> query(String sql, Class<T> clazz, Object... params);

    /**
     * 分页查询
     *
     * @param sql
     * @param page
     * @param pageSize
     * @param params
     * @return
     */
    List<Map<String, Object>> queryPagination(String sql, int page, int pageSize, Object... params);

    /**
     * 分页查询
     *
     * @param sql
     * @param start
     * @param length
     * @param params
     * @return
     */
    List<Map<String, Object>> queryPagination2(String sql, int start, int length, Object... params);

    /**
     * 查询总数
     *
     * @param sql
     * @param params
     * @return
     */
    Integer queryTotal(String sql, Object... params);

    /**
     * 查询总数
     *
     * @param table
     * @param where
     * @param params
     * @return
     */
    Integer queryTotal(String table, String where, Object... params);

    /**
     * @param sql
     * @param clazz
     * @param params
     * @param <T>
     * @return
     */
    <T> T queryForObject(String sql, Class<T> clazz, Object... params);

    int insert(String table, Map<String, Object> record);

    /**
     * 更新
     *
     * @param sql
     * @param params
     * @return
     */
    int update(String sql, Object... params);

    /**
     * 更新
     * @param table
     * @param record
     * @param where
     * @param params
     * @return
     */
    int update(String table, Map<String, Object> record, String where, Object... params);

    /**
     * 删除
     *
     * @param table
     * @param where
     * @param params
     * @return
     */
    int delete(String table, String where, Object... params);
}
